//
//  Tool.h
//  ced
//
//  Created by 尤振宇 on 15/11/6.
//  Copyright © 2015年 尤振宇. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>
#import "AppDelegate.h"

@interface Tool : NSObject

/**
 *  隐藏tabbar的方法
 */
+ (void)hideTabBarViewController:(nullable UIViewController *)viewController;

/**
 *  显示tabbar的方法
 */
+ (void)showTabBarViewController:(nullable UIViewController *)viewController;

/**
 *  转换服务器时间
 */
+(nullable NSString *)conversionServerTime:(nullable NSString *)timeStr dateFormat:(nullable NSString *)dateFormat;

/**
 *  获取时间
 */
+(nullable NSString *)dateWithDateFormat:(nullable NSString *)dateFormat;

/**
 *  获取时间
 */
+(nullable NSString *)dateWithDateFormat:(nullable NSString *)dateFormat date:(nullable NSDate *)date;

/**
 *  根据容联时间格式转换显示格式
 */
+(nullable NSString *)getDateDisplayStringByRongLian:(long long) miliSeconds;
/**
 *  根据服务器时间格式转换显示格式
 */
+(nullable NSString *)getDateDisplayStringByServer:(nullable NSString *)timeStr;

/**
 *  根据时间转换显示格式
 */
+(nullable NSString *)getDateDisplayStringByDate:(nullable NSDate *)serverDate;



/**
 *  获取汉字的首字母
 *
 *  @param name 中文
 *
 *  @return 大写的首字母
 */
+(nullable NSString *)firstNameByChineName:(nullable NSString *)name;

/**
 *  创建UIBarButtonItem  解决图片变颜色的问题
 */
+(UIBarButtonItem * _Nonnull )BarButtonItemWithImage:(nonnull UIImage *)image target:(nonnull id)target action:(nonnull SEL)action;

/**
 *  创建UIBarButtonItem  同一颜色
 */
+(UIBarButtonItem *_Nonnull)BarButtonItemWithTitle:(nonnull NSString *)title target:(nonnull id)target action:(nonnull SEL)action;

/**
 *  容联方法 保存到文件
 */
+(NSString * _Nonnull)saveToDocument:(UIImage * _Nonnull)image;

/**
 *  上个月
 */
+ (NSDate *_Nonnull)lastMonth:(NSDate *_Nonnull)date ;

/**
 *  下个月
 */
+ (NSDate *_Nonnull)nextMonth:(NSDate *_Nonnull)date ;

/**
 *  去年
 */
+ (NSDate *_Nonnull)lastYear:(NSDate *_Nonnull)date ;

/**
 *  明天
 */
+ (NSDate *_Nonnull)tomorrow:(NSDate *_Nonnull)date;

/**
 *  昨天
 */
+ (NSDate *_Nonnull)yesterday:(NSDate *_Nonnull)date;

/**
 *  yyyy-MM-dd   as 2016 04 07
 */
+(NSDate *_Nonnull)year:(NSString *_Nonnull)year month:(NSString *_Nonnull)month day:(NSString *_Nonnull)day;


/**
 根据字符串换成date
 */
+(NSDate *_Nonnull)ApplicationWithString:(NSString *_Nonnull)string;


/**
 根据字符串换成date
 */
+(NSDate *_Nonnull)DateForString:(NSString *_Nonnull)string format:(NSString *_Nonnull)format;


//获取emoji表情
//+( NSString* _Nonnull )getExpressionStrById:(NSInteger)idx;


//+(UIView *_Nonnull)LookOthersWithText:(NSString *_Nonnull)text target:(id _Nonnull)target action:(SEL _Nonnull)action;


/**
 格式 @"yyyy-MM-dd HH:mm:ss"
 */
+(NSString *_Nonnull)ApplicationWithinTimeFormat:(NSDate *_Nonnull)date;

/**
 *  邮件正文删除多余html
 */
+(NSString *_Nonnull)EmailBodyDeleteRedundantHTML:(NSString *_Nonnull)string;


//调用C语言的API来获得文件的MIMEType ，只能获取本地文件哦，无法获取网络请求来的文件
+(NSString *_Nonnull)getMIMETypeWithCAPIAtFilePath:(NSString *_Nonnull)path;


/**
 隐藏ScarchBar 的清除按钮
 */
+(void)hideScarchBarClearButton:(UISearchBar *_Nonnull)searchBar;

/**
 设置navigationBar的返回按钮

 @param image <#image description#>
 @param needText <#needText description#>
 */
+(void)setNavigationBackImage:(UIImage *_Nonnull)image needText:(BOOL)needText;


/**
 获取文件夹大小
 */
+(void)folderSizeAtPath:(NSString *_Nonnull)folderPath operation:(void(^_Nullable)(float folderSize))operation;


/**
 获取文件大小
 */
+(long long)fileSizeAtPath:(NSString *_Nonnull)filePath;


/**
 清理文件夹
 */
+(void)clearFolder:(NSString *_Nonnull)path mainThread:(dispatch_block_t _Nullable )block;

/**
 文件大小转换
 */
+(NSString *_Nullable)fileSize:(float)size;
@end


@interface NSDate (Category)

/**
 将一个时间转成一个当前时区时间
 @return new date
 */
-(nullable NSDate *)currentTimeZone;

/**
 是否是今天及以后
 
 @param onlyAfter YES 不包括今天
 */
-(BOOL)todayLater:(BOOL)onlyAfter;
@end

@interface NSDictionary (Category)

/**
 字典转JSONStr

 @return NSString
 */
-(NSString *_Nonnull)JSONStr;
@end

@interface NSString (Category)

/**
 JSONStr转dic

 @return NSDictionary
 */
-(NSDictionary *_Nonnull)JSONDictionary;


/**
 UTF-8 编码

 @return NSString
 */
-(NSString *_Nonnull)UTF8Value;


/**
 str转Coordinate2D

 @return CLLocationCoordinate2D
 */
-(CLLocationCoordinate2D)CLLocationCoordinate2DValue;


/**
 获取字符串宽度

 @param fontSize <#fontSize description#>
 @param height <#height description#>
 @return <#return value description#>
 */
-(float)widthForFontSize:(float)fontSize andHeight:(float)height;


/**
 获得字符串的高度

 @param fontSize <#fontSize description#>
 @param width <#width description#>
 @return <#return value description#>
 */
-(float)heightForFontSize:(float)fontSize andWidth:(float)width;


/**
 SHA1编码
 */
-(NSString *_Nonnull)SHA1Coding;

/**
 BSAE64编码
 */
-(NSString *_Nonnull)BASE64Coding;

/**
 BASE64解码
 */
-(NSString *_Nonnull)BASE64Decoding;

/**
 HMAC.SHA1编码
 */
-(NSString *_Nonnull)HMAC_SHA1Coding:(NSString *_Nonnull)key;

-(UIColor *_Nonnull)colorWithHexString;


/**
 *  判断邮箱是否正确
 */
-(BOOL)validateEmail;
/**
 手机号码验证或 固定电话验证
 */
-(BOOL)validateMobile;

@end

@interface NSObject (Category)
/**
 对象的所有属性以及属性值

 @return NSDictionary
 */
-(NSDictionary * _Nonnull)AllAttributesAndTheAttributeValues;

/**
 对象的所有属性

 @return NSArray
 */
- (NSArray * _Nonnull)AllAttributes;

@end

@interface NSFileManager (Category)

- (nullable NSArray *)folderAllFileAtPath:(NSString *_Nonnull)folderPath;

@end

@interface AppDelegate (Category)

+(instancetype _Nullable)sharedApplication;

@end

@interface NSBundle (Category)

+(NSString *_Nonnull)BundleIdentifier;

+(NSString *_Nonnull)APPName;

+(float)iOS_Version;
@end

@interface UIView (Category)

+(id _Nonnull)ViewWithXib;

-(void)roundedCorners_5PX;

-(void)roundedCorners_10PX;

-(void)roundedCorners:(CGFloat)corners;

-(void)borderWidthAndColor:(UIColor *_Nonnull)color;
@end

@interface UIImage (Category)
/**
 调整CIImage大小
 */
+(nullable UIImage *)resizeCodeImage:(CIImage *_Nonnull)image withSize:(CGSize)size;


/**
 调整到目标尺寸
 */
-(UIImage *_Nonnull)adjustToSize:(CGSize)newSize;


/**
 调整到固定宽度
 */
-(UIImage *_Nonnull)imageCompressForWidth:(CGFloat)defineWidth;

@end

@interface CALayer (Category)

/**
 取消动画
 */
+(void)cancelAnimation:(void(^_Nullable)())block;

@end





